package thread;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @program: baseModule
 * @description:
 * @author: zhanghz001
 * @create: 2020-10-25 16:08
 **/
public class TicketRunnable implements Runnable {
    private int i = 100;
    AtomicInteger integer = new AtomicInteger(100);
    Object o = new Object();
    Lock lock = new ReentrantLock();

    @Override
    public void run() {
        // while (true) {
        //     synchronized (o) {
        //         if (i > 0) {
        //             System.out.println(Thread.currentThread().getName() + "消费了第: " + i + " 张票");
        //             i--;
        //         } else {
        //                 break;
        //             }
        //     }
        //
        // }

        //
        // while (true) {
        //     int i1 = integer.getAndDecrement();
        //     if (i1 > 0) {
        //         System.out.println(Thread.currentThread().getName() + "消费了第: " + i1 + " 张票");
        //
        //     } else {
        //         break;
        //     }
        // }

        //
        // while (i > 0) {
        //     decrement();
        // }

        //

        while (true) {
            if ("第一个窗口".equals(Thread.currentThread().getName())) {
                synchronized (TicketRunnable.class) {
                    if (i <= 0) {
                        break;
                    } else {
                        System.out.println(Thread.currentThread().getName() + "消费了第: " + i + " 张票");
                        i--;
                    }
                }
                // if (!synchronizedMethod()) {
                //     break;
                // }
            }
            if ("第二个窗口".equals(Thread.currentThread().getName())) {

                //
                synchronized (TicketRunnable.class) {
                    if (i <= 0) {
                        break;
                    } else {
                        System.out.println(Thread.currentThread().getName() + "消费了第: " + i + " 张票");
                        i--;
                    }
                }
            }
        }

    }

    private synchronized boolean synchronizedMethod() {
        if (i > 0) {
            System.out.println(Thread.currentThread().getName() + "消费了第: " + i + " 张票");
            i--;
            return true;
        } else {
            return false;
        }
    }

    // private synchronized void decrement() {
    //     if (i > 0) {
    //         System.out.println(Thread.currentThread().getName() + "消费了第: " + i + " 张票");
    //         i--;
    //     }
    // }

}
